// 导入 http 模块
import http from 'wechat-http'
// 基础路径，同时需添加合法请求域名
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = config => {
  config.header = {
    // 携带token
    Authorization: 'Bearer ' + wx.getStorageSync('token'),
    // 如果有传递header信息，可覆盖默认header
    ...config.header
  }
  return config
}

// 响应拦截器，返回核心数据 data
http.intercept.response = async res => {
  if (res.data.code === 10000) {
    return res.data
  } else if (res.data.code === 401) {
    // 如果当前请求路径是'/refreshToken'，就不在刷新了，否则会死循环
    if (res.config.url.includes('/refreshToken')) {
      const pages = getCurrentPages()
      const page = pages[pages.length - 1]
      wx.redirectTo({
        url: '/pages/login/index?redirectUrl=/' + page.route
      })
      return
    }
    const res2 = await http.post(
      '/refreshToken',
      {},
      {
        header: {
          Authorization: wx.getStorageSync('refreshToken')
        }
      }
    )
    const app = getApp()
    app.setToken('token', res2.data.token)
    app.setToken('refreshToken', res2.data.refreshToken)
    // 修改请求头
    res.config.header = { Authorization: wx.getStorageSync('token') }
    // 重发请求
    return await http(res.config)
  } else {
    wx.utils.toast(res.data.message || '业务错误')
    // 主动返回失败的promise，不执行await后续代码
    return Promise.reject(res.data)
  }
}

// 普通的模块导出
export default http
